package com.xiaoshuidi.cloud.module.contract.controller.admin.contract.vo.settlement;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.Max;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;
import java.time.LocalDate;

import static com.xiaoshuidi.cloud.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;

/**
* 合同结算 Base VO，提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段，请不要添加到这里，影响 Swagger 文档生成
*/
@Data
public class SettlementBaseVO {

    /**
     * 合同id
     */
    @Schema(description = "合同id")
    @NotNull(message = "合同不能为空")
    private Long contractId;

    /**
    * 租客姓名
    * */
    private String customerName;

    /**
    * 租客手机号
    * */
    private String customerPhone;

    /**
    * 换房类型 1 正常退租  | 2 违约退租 | 3 协议退租 |   4 中途换房 | 5 续租换房
    * */
    private String evictionType;

    /**
    * 退租时间
    * */
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    @NotNull(message = "退租时间不能为空")
    private LocalDate evictionTime;

    /**
    * 退租原因
    * */
    private String evictionReason;

    /**
    * 资金流向 out 流出| in 流入
    * */
    @NotNull(message = "资金流向不能为空")
    private String flowType;

    /**
    * 持卡人
    * */
    private String cardholder;

    /**
     * 支行省
     */
    private String bankProvince;
    /**
     * 支行市
     */
    private String bankCity;
    /**
    * 支行code
    * */
    private String bankCode;
    /**
    * 银行卡号
    * */
    private String customerCreditCard;

    /**
    * 所属银行
    * */
    private String customerBank;

    /**
    * 所属支行
    * */
    private String customerBankArea;

    /**
    * 附件信息
    * */
    private String certificateUrl;

    /**
    * 备注
    * */
    @Size(max = 100, message = "备注不能超过100个字")
    private String remark;

    /**
     * 退款周期开始日期
     */
    private LocalDate refundableStartDate;

    /**
     * 退款周期结束日期
     */
    private LocalDate refundableEndDate;


    /**
     * 收款开始时间
     * */
    @Schema(description = "收款开始时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate startReceivables;

    /**
     * 收款结束时间
     * */
    @Schema(description = "收款结束时间")
    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
    private LocalDate endReceivables;

    /**
    * 应收款费用
    * */
    @NotNull(message = "应收款费用不能为空")
    private BigDecimal receivablesAmount;
    /**
     * 应退款费用
     * */
    @NotNull(message = "应退款费用不能为空")
    private BigDecimal refundableAmount;
    /**
    *总计金额
    * */
    @NotNull(message = "金额不能为空")
    private BigDecimal amount;
}
